Threshold an Image using OpenCV
The cvThreshold function allows us to reject pixels above or below a set value while keeping the others. In this example the input image is separated into the RGB channels. Then we preform a threshold on the red channel, with a maximum value of 100. The result of this is that all the light areas of the image are removed.
#include "stdafx.h"
#include "cv.h"
#include "highgui.h"
int _tmain(int argc, _TCHAR* argv[])
{
// open and display input image
IplImage* input = cvLoadImage("test.jpg");
cvNamedWindow("Input", CV_WINDOW_AUTOSIZE);
cvShowImage("Input", input);
// create the output images
IplImage* channel_r = cvCreateImage(cvSize(input->width, input->height), input->depth, 1);
IplImage* channel_g = cvCreateImage(cvSize(input->width, input->height), input->depth, 1);
IplImage* channel_b = cvCreateImage(cvSize(input->width, input->height), input->depth, 1);
// split the image
cvSplit(input, channel_r, channel_g, channel_b, NULL);
// display image
cvNamedWindow("Channel R", CV_WINDOW_AUTOSIZE);
cvShowImage("Channel R", channel_r);
cvSaveImage("channel_r.png", channel_r);
// threshold red channel
IplImage* output = cvCreateImage(cvSize(channel_r->width, channel_r->height), channel_r->depth, 1);
cvThreshold(channel_r, output, 100,100, CV_THRESH_TRUNC);
// display the output image
cvNamedWindow("Output", CV_WINDOW_AUTOSIZE);
cvShowImage("Output", output);
cvSaveImage("output.png", output);
// wait for user
cvWaitKey(0);
// garbage collection
cvReleaseImage(&input);
cvDestroyWindow("Input");
cvReleaseImage(&channel_r);
cvDestroyWindow("Channel R");
cvReleaseImage(&output);
cvDestroyWindow("Output");
return 0;
}


